#ifndef __SCENEOBJECTMOVECMD_H__
#define __SCENEOBJECTMOVECMD_H__

#include <stl/list.h>
#include "command/command.h"

struct SSceneObjectMovePosInfo{
    uint32 m_nID;
    TV3 m_sPos;
    TPosition m_sMapPos;
    class CSceneObject* m_pSceneObject;
};

class CSceneObjectMoveCmd: public CCommand{
public:
    CSceneObjectMoveCmd( list<SSceneObjectMovePosInfo> *pvStartMoveInfoList, list<SSceneObjectMovePosInfo> *pvEndMoveInfoList );
    virtual ~CSceneObjectMoveCmd();
    virtual void Init();
	virtual void Final();
	virtual bool32 Undo();
	virtual bool32 Redo();

private:
    list<SSceneObjectMovePosInfo> m_vStartMoveInfoList;
    list<SSceneObjectMovePosInfo> m_vEndMoveInfoList;
};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct SSceneObjectRotationScaleInfo{
    uint32 m_nID;
    TV3 m_sValue;
};

class CSceneObjectRotationCmd: public CCommand{
public:
    CSceneObjectRotationCmd( list<SSceneObjectRotationScaleInfo> *pvStartInfoList, list<SSceneObjectRotationScaleInfo> *pvEndInfoList );
    virtual ~CSceneObjectRotationCmd();
    virtual void Init();
	virtual void Final();
	virtual bool32 Undo();
	virtual bool32 Redo();

private:
    list<SSceneObjectRotationScaleInfo> m_vStartInfoList;
    list<SSceneObjectRotationScaleInfo> m_vEndInfoList;
};

class CSceneObjectScaleCmd: public CCommand{
public:
    CSceneObjectScaleCmd( list<SSceneObjectRotationScaleInfo> *pvStartInfoList, list<SSceneObjectRotationScaleInfo> *pvEndInfoList );
    virtual ~CSceneObjectScaleCmd();
    virtual void Init();
	virtual void Final();
	virtual bool32 Undo();
	virtual bool32 Redo();

private:
    list<SSceneObjectRotationScaleInfo> m_vStartInfoList;
    list<SSceneObjectRotationScaleInfo> m_vEndInfoList;
};


#endif
